<!--
 * @LastEditors: 七七
 * @Date: 2023-01-05 20:35:57
-->
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>运算符</title>
</head>

<body>

  <!-- 
    * 运算符也叫操作符
    * 通过运算符可以对一个或多个值进行计算，并获取运算结果
    * typeof 就是一个运算符，可以用来获取一个值的类型，它会将该值的类型以字符串的形式返回

    * 算数运算符：+ - * / %
    * 任何值和NaN做加法计算结果都是NaN
    * 任何值 + '' 即可转换为String，调用String()函数，隐式转换 
    * 任何值做 - / * 运算时都会自动转换为Number,我们可以通过 -0 *1 /1来将其转换为Number,隐式转换

    * 逻辑运算符 &&与 ||或 !非
    * ! 非。 取反 Boolean值，如果对一个非布尔值进行元素，则会将其转化为布尔值，然后再取反。利用该特点，可以将其他数据类型转换为布尔值。！！！为任意数据类型取两次非运算（一次反结果错误），来将其转换为布尔值。原理和Boolean()函数一样。
    * && 与。对符号两侧的值进行运算并返回结果。运算规则：两个值都为true则为true，否则为false。短路，如果第一个值为false，不会检查第二个值。
    * || 或。对符号两侧的值进行运算并返回结果。运算规则：两个值都为false则返回false，否则为true。短路。如果第一个值为true，则不会检查第二个值。
    
    * && || 非布尔值的情况：
      对于非布尔值进行与或运算时，会先将其转换为布尔值，然后再运算，并且返回原值。
      与运算：如果两个值都为true，则返回第二个的值。如果两个值都为false，则返回第一个值。如果一个true，一个false，则返回false的值。
      或运算：如果两个值都为false，则返回第二个的值。如果两个值都为true，则返回第一个值。如果一个true，一个false，则返回true的值。


    * 关系运算符 > < = >= <=
    * 非数值情况：
    * 非数值进行比较时，会将其转换为数字然后再比较，任何值和NaN比较都为false
    * 符号两侧都为字符串时，不会转换为数字进行比较，分别比较字符串中字符的Unicode编码
  -->

  <script>
    var a = 123;
    console.log(typeof a); //number

    var b = 1 + NaN;
    console.log(b); //NaN

    var c = !true;
    console.log(c); //false

    //true&&true
    var d = 1 && 2;
    console.log(d); //2
    //false&&true
    var d2 = 0 && 2;
    console.log(d2); //0
    var d3 = NaN && false;
    console.log(d3); //NaN
    //true||true
    var e = 1 || 2;
    console.log(e); //1
  </script>
</body>

</html>